import axios,{type InternalAxiosRequestConfig,type AxiosResponse} from 'axios'
import { message } from 'antd'
import store from '../../store'


//创建私有axios实例 不用去刻意定义类型 可以使用隐式推断
export const http=axios.create({
    baseURL:'https://localhost:8080',
    timeout:5000
})


//请求拦截器
http.interceptors.request.use((config:InternalAxiosRequestConfig)=>{
    //如果不做处理 就返回config 如果不返回 就会导致请求失败
    // console.log(config.data)
    //为请求头添加token
    const token=store.getState().userReducer.token
    //并不是所有页面都需要token
    if(token){
        //http协议中的标准字段 专门用来携带认证信息
        config.headers['Authorization']=`Bearer ${token}`
    }
    return config
})

//响应拦截器 每个请求都需要判断当前响应的状态码是否为200 如果不是200 就需要根据状态码进行不同的处理
http.interceptors.response.use((res:AxiosResponse)=>{
    const resData=res.data
    if(resData.code!==200){
        message.error('请求失败'+resData.message)
        return Promise.reject(new Error(resData.message))
    }
    return res
})